// 在每个视图需要更新的地方 new 一个 watcher ，当数据有变化的时候，更新视图
class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm;
    // key 代表观察的属性
    this.key = key;
    // cb 是回调函数，用来更新视图
    this.cb = cb;

    // 把 watcher 记录到 dep 的静态属性 target 中
    Dep.target = this;
    // this.oldValue = vm[key] 会触发 get 方法，将 watcher 添加到 dep 中
    this.oldValue = vm[key];
    Dep.target = null;
  }
  // 当数据发生变化的时候，更新视图
  update(value) {
    // 如果数据没有变化，直接返回
    if (value === this.oldValue) return;
    // 调用 cb 更新视图
    this.cb(value);
  }
}
